package com.poly.flowable.service;

import com.alibaba.fastjson.JSONObject;
import com.poly.flowable.domain.SysForm;
import com.poly.flowable.enums.form.SceneGroupEnum;
import com.poly.flowable.pojo.dto.FormFieldDTO;

import java.util.List;

/**
 * 表单
 * @author Yang huijing
 * @date 2021-04-03
 */
public interface ISysFormService
{
    /**
     * 查询流程表单
     *
     * @param formId 流程表单ID
     * @return 流程表单
     */
    SysForm selectSysFormById(Long formId);

    /**
     * 查询流程表单列表
     *
     * @param sysForm 流程表单
     * @return 流程表单集合
     */
    List<SysForm> selectSysFormList(SysForm sysForm);

    /**
     * 新增流程表单
     *
     * @param sysForm 流程表单
     * @return 结果
     */
    int insertSysForm(SysForm sysForm);

    /**
     * 修改流程表单
     *
     * @param sysForm 流程表单
     * @return 结果
     */
    int updateSysForm(SysForm sysForm);

    /**
     * 批量删除流程表单
     *
     * @param formIds 需要删除的流程表单ID
     * @return 结果
     */
    int deleteSysFormByIds(Long[] formIds);

    /**
     * 删除流程表单信息
     *
     * @param formId 流程表单ID
     * @return 结果
     */
    int deleteSysFormById(Long formId);

    /**
     * 新增流程表单
     *
     * @param sysForm 流程表单
     * @return 结果
     */
    int insertForm(SysForm sysForm);

    /**
     * 修改流程表单
     *
     * @param sysForm 流程表单
     * @return 结果
     */
    int updateForm(SysForm sysForm);

    List<FormFieldDTO> getFormField(JSONObject model);

    /**
     * 获取表单字段信息
     * @param formContent
     * @return
     */
    List<FormFieldDTO> getFormField(String formContent);

    /**
     * 获取表单字段信息
     * @param formId
     * @return
     */
    List<FormFieldDTO> getFormField(Long formId);

    List<FormFieldDTO> getSceneFieldList(List<FormFieldDTO> fieldList, SceneGroupEnum sceneGroup);

    List<FormFieldDTO> getSceneFieldList(SysForm form, SceneGroupEnum sceneGroup);

    List<FormFieldDTO> getQueryFieldList(List<FormFieldDTO> allField);

    List<FormFieldDTO> getQueryFieldList(SysForm form);

    /**
     * 查询流程的表单
     * @param deployId
     * @return
     */
    SysForm selectSysFormByDeployId(Long deployId);
}
